package cn.tedu.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

/**本类用于测试Collection接口*/
public class TestCollection {
    public static void main(String[] args) {
        //1.创建Collection相关的对象
        //new Collection();//报错,因为这是个接口
        Collection<Integer> c = new ArrayList();//不能被实例化，这里是建立了一个接口实现类
        //Collection<Integer> list2 = new ArrayList<>();
        //Collection<Integer> list3 = new ArrayList<Integer>();

        //2.向集合中存入数据
        c.add(100);//Ctrl+D向下复制
        c.add(200);
        c.add(300);
        c.add(400);
        c.add(500);
        System.out.println(c);//打印查看集合中的所有元素[100, 200, 300, 400, 500]

        //3.测试集合中的常用方法
        //c.clear();//清空集合
        //System.out.println(c);//[]

        System.out.println(c.hashCode());//127240651,打印集合对象的哈希码值
        System.out.println(c.equals(200));//false,集合对象与集合中某一个元素
        System.out.println(c);//打印的不是集合对象的地址值,而是集合中的具体元素

        System.out.println(c.contains(200));//true,判断集合中是否包含指定元素200
        System.out.println(c.isEmpty());//false,判断集合是否为空
        System.out.println(c.remove(100));//删除集合中的指定元素100
        System.out.println(c);//[200, 300, 400, 500]
        System.out.println(c.size());//4,获取集合中元素的个数

        Object[] array = c.toArray();//将集合对象转为数组
        System.out.println(Arrays.toString(array));//使用数组工具类打印数组

        //4.测试集合间的操作
        //4.1创建第2个集合,并存入数据
        Collection<Integer> c2 = new ArrayList<>();
        c2.add(2);
        c2.add(4);
        c2.add(5);
        System.out.println(c2);//[2, 4, 5]

        //4.2测试多个集合间的操作
        c.addAll(c2);//将c2集合的所有元素添加到c集合中
        System.out.println(c);//[200, 300, 400, 500, 2, 4, 5]
        System.out.println(c2);//[2, 4, 5]

        //判断c集合中是否包含c2集合的所有元素
        System.out.println(c.containsAll(c2));//true
        c.remove(2);//把c集合中属于c2集合的元素2删除
        System.out.println(c.containsAll(c2));//false,因为还缺一个元素2

        System.out.println(c);//[200, 300, 400, 500, 4, 5]
        System.out.println(c.removeAll(c2));//删除c集合中属于c2集合的所有元素
        System.out.println(c);//[200, 300, 400, 500]

        System.out.println(c2);//[2, 4, 5]
        System.out.println(c.add(5));//向c集合中添加元素5
        System.out.println(c);//[200, 300, 400, 500, 5]
        System.out.println(c.retainAll(c2));//保留c集合中属于c和c2集合的公共元素,取交集
        System.out.println(c);//[5],c集合中只剩下了两个集合的公共元素5

        //5.集合的迭代/遍历
        /*迭代步骤:
        1.获取迭代器 集合名.iterator();
        2.通过迭代器判断集合中是否有下一个元素可以迭代 迭代器.hasNext()
        3.获取当前迭代到的元素
        注意:迭代器的泛型取决于要迭代的集合的泛型,比如c2是Integer*/
        Iterator<Integer> it = c2.iterator();
        while(it.hasNext()){
            Integer num = it.next();
            System.out.println(num);
        }
    }
}
